Documentation
inbox/README from development resources.md
Dynaplex Development Resources
This directory contains development tooling and infrastructure—code that helps developers build the solution but is NOT runtime feature functionality.
What are Development Resources?
Development resources provide the tooling, automation, and infrastructure needed to develop, build, analyze, and scaffold the Acsis platform:
- Dynaplex infrastructure: Core framework, service defaults, orchestration, source generators
- Roslyn analyzers: Architecture enforcement and code quality rules
- Compatibility shims: Legacy system compatibility layers
- Project templates: Scaffolding for new components
- Build scripts: MSBuild targets, CI/CD helpers
Namespace Convention
All development resources MUST use the Acsis.Dynaplex.* namespace.
This namespace serves as a strong signal that the project:
- Is development-time tooling, NOT runtime functionality
- May depend on EF Core, ASP.NET Core, Roslyn, MSBuild, etc.
- Should NOT be referenced as a normal compile-time dependency by components (only as analyzers/build)
- Lives in this directory (
development/resources/)
Examples
| Project | Namespace |
|---|---|
| Core framework utilities | Acsis.Dynaplex |
| Service defaults | Acsis.Dynaplex.Strata.ServiceDefaults |
| Orchestration helpers | Acsis.Dynaplex.Strata.Orchestration |
| Source generators | Acsis.Dynaplex.Strata.SourceGenerators |
| Roslyn analyzers | Acsis.Dynaplex.RoslynAnalyzers |
| EntLib compatibility | Acsis.Dynaplex.EntLibCompatShim |
Directory Structure
resources/
├── dynaplex/ # Core Dynaplex framework
│ ├── src/
│ │ ├── Acsis.Dynaplex/
│ │ ├── Acsis.Dynaplex.Strata.ServiceDefaults/
│ │ ├── Acsis.Dynaplex.Strata.Orchestration/
│ │ └── Acsis.Dynaplex.Strata.SourceGenerators/
│ └── resources/
│ └── dplx-cli/
│
├── analyzers/ # Roslyn analyzers
│ ├── src/
│ │ └── Acsis.Dynaplex.RoslynAnalyzers/
│ └── test/
│ └── Acsis.Dynaplex.RoslynAnalyzers.Tests/
│
├── ent-lib-compat-shim/ # Legacy compatibility
│ └── Acsis.Dynaplex.EntLibCompatShim/
│
├── project-templates/ # Component scaffolding templates
│ ├── Abstractions/
│ ├── Core/
│ ├── Database/
│ ├── ApiClient/
│ ├── DbMigrator/
│ ├── UnitTests/
│ └── IntegrationTests/
│
├── build/ # Build infrastructure
│ └── ...
│
└── scripts/ # Development scripts
└── ...
What Development Resources Are NOT
Runtime libraries are NOT development resources. The following belong in libraries/ with the Acsis.Dynaplex.Strata.* namespace:
- GS1/barcode encoding
- Domain primitives (strongly-typed IDs, value objects)
- Validation helpers
- Runtime infrastructure abstractions (observability, resilience)
See Runtime Libraries for documentation.
Reference Rules
How Components Reference Development Tooling
Development tooling should be referenced differently than runtime dependencies:
<!-- Analyzers: Use PrivateAssets to prevent leaking into runtime -->
<ProjectReference Include="...\Acsis.Dynaplex.RoslynAnalyzers.csproj"
PrivateAssets="all"
IncludeAssets="analyzers" />
<!-- Build targets: Use buildtransitive -->
<ProjectReference Include="...\Acsis.Dynaplex.csproj"
PrivateAssets="all"
IncludeAssets="build;buildtransitive" />
Development Tooling CAN Reference
- Any .NET libraries (EF Core, ASP.NET Core, Roslyn, MSBuild, etc.)
- Other development tooling projects
- BCL/System namespaces
Development Tooling Should NOT
- Be referenced as a normal compile-time dependency by production services
- Have its types appear in public APIs of components
- Be included in runtime deployment artifacts (except as analyzers/build)
Creating New Development Tooling
- Place the project under the appropriate subdirectory in
development/resources/ - Use the
Acsis.Dynaplex.*namespace - Update the analyzer whitelist if needed
- Document the purpose in this README
Documentation
- ADR-046: Library Projects in Dynaplex (explains the distinction from runtime libraries)
- Dynaplex Architecture